home *** CD-ROM | disk | FTP | other *** search
/ .net 2002 March / DotNetMagazine-Issue107-Coverdisc-NET107-02-03-PCMac.bin / pc / PC Software / free_browsing / DavesQckSearchDbar3-14 / dqsd.exe / helpmenu.js < prev    next >
Text File  |  2002-09-30  |  6KB  |  203 lines

  1. function registerMenuHook( menuHook )
  2. {
  3.   if ( typeof menuHooks == 'undefined' )
  4.     menuHooks = new Array();
  5.     
  6.   menuHooks.push( menuHook );
  7. }
  8.  
  9. function showpop()
  10. {
  11.   document.deff.q.focus();
  12.   document.deff.q.createTextRange().select();
  13.   var mb = new ActiveXObject("DQSDTools.MenuBuilder");
  14.  
  15.   // Align the menu with the button
  16.   mb.HorizontalAlignment = ( buttonalign == 'left' ? 1 : 2 ); // 1 = left, 2 = right (default)
  17.   
  18.   mb.AppendMenuItem( local(ABOUT_TEXT), "about", "Help on using Dave's Quick Search Deskbar" );
  19.   mb.AppendMenuItem( "Check for update...", "checkWebForUpdateNotifyAll", "Check for update to Dave's Quick Search Deskbar" );
  20.   mb.AppendSeparator( 0 );
  21.   
  22.   menuHandles = new Object();
  23.  
  24.   for (i = 0; i < categoryarray.length; i++)
  25.   {
  26.     var categoryName = categoryarray[i];
  27.     var helparray = categories[categoryName];
  28.     
  29.     // Are there any enabled searches in this category?
  30.     for (var k = 0; k < helparray.length && !helparray[k].enabled; k++)
  31.     {
  32.     }
  33.  
  34.     // If all the searches are disabled in the category, don't add a submenu
  35.     if ( k == helparray.length )
  36.       continue;
  37.  
  38.     var hcatmenu = mb.AppendSubMenu( categoryName );
  39.     helparray.sort( searchCompare );
  40.     for (var k = 0; k < helparray.length; k++)
  41.     {
  42.       var search = helparray[k];
  43.       var alias = getSearchAliases( search );
  44.  
  45.       if ( search.enabled && !search.nomenu )
  46.       {
  47.       
  48.         // If there are subcategories, nest them
  49.         if ( search.subcats && search.subcats.length >= 1 )
  50.         {
  51.           subcatPath = categoryName;
  52.           hsubmenu = hcatmenu;
  53.           for ( var isubmenu = 0; isubmenu < search.subcats.length; isubmenu++ )
  54.           {
  55.             subcatPath += '~' + search.subcats[ isubmenu ];
  56.             if ( menuHandles[ subcatPath ] )
  57.               hsubmenu = menuHandles[ subcatPath ]
  58.             else
  59.             {
  60.               hsubmenu = mb.AppendSubMenu( search.subcats[ isubmenu ], hsubmenu );
  61.               menuHandles[ subcatPath ] = hsubmenu;
  62.             }
  63.           }
  64.         }
  65.         else // no subcategories, append menu items
  66.         {
  67.           hsubmenu = hcatmenu;
  68.         }
  69.       
  70.         mb.AppendMenuItem( search.name + (search.local ? ' [local]' : '' )  + '\t' + (search.aliasmenudisplay ? alias.replace(/&/g, '&&') : ""),  // menu text along with alias
  71.                            search.aliases[0],         // function invoked when user selects menu item
  72.                            makeToolTipString(search), 
  73.                            hsubmenu );
  74.       }
  75.     }
  76.   }
  77.   
  78.   // Add any hooks created by searches or add-ons
  79.   if ( typeof menuHooks != 'undefined' )
  80.   {
  81.     for ( var i = 0; i < menuHooks.length; i++ )
  82.     {
  83.       menuHooks[i]( mb );        
  84.     }
  85.   }
  86.  
  87.   appendMRUMenuSelections( mb );
  88.  
  89.   if(helpMenuToolTipsEnabled)
  90.   {
  91.     try
  92.     {
  93.       if(typeof helpMenuToolTipsDisplayTime == 'undefined')
  94.       {
  95.          helpMenuToolTipsDisplayTime = 3;
  96.       }
  97.  
  98.       mb.InitialiseTooltips(helpMenuToolTipsDisplayTime);
  99.     }
  100.     catch(e)
  101.     {
  102.       alert("Error initialising tooltips for menus: " + e.description);
  103.     }
  104.   }
  105.  
  106.   var fn = mb.Display(document);
  107.   if ( fn )
  108.   {
  109.     var alias = null;
  110.     if ( isInternalSearch( fn ) )
  111.       alias = searches[fn].aliases[1];
  112.     mnu( fn, alias );
  113.     if ( fn != 'about' && fn != 'checkWebForUpdateNotifyAll' )
  114.       saveMenuHistory( alias ? alias : fn );
  115.   }
  116.   return false;
  117. }
  118.  
  119. function saveMenuHistory( alias )
  120. {
  121.   var menuContent = null;
  122.   try
  123.   {
  124.     menuContent = readFile( "mrumenu.txt" );
  125.   }
  126.   catch (e) {}
  127.   var menus = menuContent ? menuContent.replace(/\r\n/g, '\n').split('\n') : new Array(0);
  128.   
  129.   var exists = false;
  130.   var newmenus = new Array(0);
  131.   for ( var i = 0; i < menus.length; i++ )
  132.   {
  133.     if ( menus[i].toLowerCase() != alias )
  134.       newmenus.push( menus[i] );
  135.     else
  136.       exists = true;
  137.   }
  138.   if ( exists )
  139.     menus = (alias + '\n' + newmenus.join('\n')).split('\n');
  140.   
  141.   menus.push( alias );
  142.   if ( menus.length > menuMRUlength )
  143.     menus.splice( 0, menus.length - menuMRUlength );
  144.   writeFile( "mrumenu.txt", menus.join('\r\n') );
  145. }
  146.  
  147. function appendMRUMenuSelections( mb )
  148. {
  149.   var menuContent = null;
  150.   try
  151.   {
  152.     menuContent = readFile( "mrumenu.txt" );
  153.   }
  154.   catch (e) {}
  155.   if ( menuContent )
  156.   {
  157.     mb.AppendSeparator( 0 );
  158.     var menus = menuContent.replace(/\r\n/g, '\n').split('\n');
  159.     for ( var i = 0; i < menus.length; i++ )
  160.     {
  161.       for ( var iSearch in searches )
  162.       {
  163.         var search = searches[iSearch];
  164.         if ( search.aliases )
  165.         for ( var iAlias = 0; iAlias < search.aliases.length; iAlias++ )
  166.         {
  167.           if ( menus[i] == search.aliases[iAlias] )
  168.           {
  169.             var alias = getSearchAliases( search );
  170.             
  171.             // Create 'mneumonic' using the last digit of the number
  172.             var mnemonic = (menus.length - i).toString();
  173.             mnemonic = mnemonic.substr( 0, mnemonic.length - 1 ) + "&" + mnemonic.substr( mnemonic.length - 1 );
  174.             mb.AppendMenuItem( mnemonic + "  " + search.name + '\t' + alias, search.aliases[0], makeToolTipString(search) );
  175.             break;
  176.           }
  177.         }
  178.       }
  179.     }
  180.   }
  181.   
  182. }
  183.  
  184. function makeToolTipString(search)
  185. {
  186.   var tip = '';
  187.   if ( helpMenuToolTipsEnabled )
  188.   {
  189.     if ( search.desc != '' && search.desc != search.name )
  190.     {
  191.       tip = search.desc
  192.                   .replace( /<[^>]+>/g, '' )          // any tags
  193.                   .replace( /(^\s*)|(\s*$)/g, '' )    // leading/trailing whitespace
  194.                   .replace( /\r\n\s*\r\n/g, '\r\n' )  // blank lines
  195.                   .replace( />/g, '>' )            // HTML gunk
  196.                   .replace( /</g, '<' )
  197.                   .replace( /&/g, '&' )
  198.                   .replace( /\t/g, '    ' )           // reduce indentation
  199.     }
  200.   }
  201.   return tip;
  202. }
  203.